共计 1343 个字符,预计需要花费 4 分钟才能阅读完成。
题目描述
已知火星人使用的运算符为#、$,其与地球人的等价公式如下:
x#y = 2x+3y+4
x$y = 3*x+y+2
1、其中x、y是无符号整数
2、地球人公式按C语言规则计算
3、火星人公式中,$的优先级高于#,相同的运算符,按从左到右的顺序计算
现有一段火星人的字符串报文,请你来翻译并计算结果。
题目要求
- 输入描述:
火星人字符串表达式(结尾不带回车换行)
输入的字符串说明: 字符串为仅由无符号整数和操作符(#、$)组成的计算表达式。例如:123#4$5#67$78。 - 用例保证字符串中,操作数与操作符之间没有任何分隔符。
- 用例保证操作数取值范围为32位无符号整数。
- 保证输入以及计算结果不会出现整型溢出。
- 保证输入的字符串为合法的求值报文,例如:123#4$5#67$78
- 保证不会出现非法的求值报文,例如类似这样字符串: *
-
- #4$5 //缺少操作数
-
- 4$5# //缺少操作数
-
- 4#$5 //缺少操作数
-
- 4 $5 //有空格
-
- 3+4-5*6/7 //有其它操作符
-
- 12345678987654321$54321 //32位整数计算溢出
-
- 输出描述:
根据输入的火星人字符串输出计算结果(结尾不带回车换行)
示例1
输入
7#6$5#12
输出
226
示例:
7#6$5#12 =7#(3*6+5+2)#12 =7#25#12 =(2*7+3*25+4)#12 =93#12 =2*93+3*12+4 =226
JAVA解法
import java.util.Scanner;
/**
* @since 2022年4月22日
*/
public class MartianText {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
String[] arr_jin = line.split("#");
int sum = dealWithArr_jin(arr_jin[0]);
for (int i = 1; i < arr_jin.length; i++) {
sum = calculate_jin(sum, dealWithArr_jin(arr_jin[i]));
}
System.out.print(sum); // 注意!!!不带回车
}
private static Integer dealWithArr_jin(String arr_jin) {
String[] arr_dollar = arr_jin.split("\\$");
if (arr_dollar.length < 2) {
return Integer.parseInt(arr_jin);
}
int temp = Integer.parseInt(arr_dollar[0]);
for (int j = 1; j < arr_dollar.length; j++) {
temp = calculate_dollar(temp, Integer.parseInt(arr_dollar[j]));
}
return temp;
}
private static int calculate_dollar(int x, int y) {
return 3 * x + y + 2;
}
private static int calculate_jin(int x, int y) {
return 2 * x + 3 * y + 4;
}
}
正文完